package com.example.myapplication01.chapter07.provider;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;

import com.example.myapplication01.chapter07.database.UserDBHelper;

public class UserInfoProvider extends ContentProvider {
//    声明一个用户数据库的帮助器对象
    private UserDBHelper userDB;
    //Uri匹配的代号
    public static final int USER_INFO=1;
//    Uri匹配器
    public static final UriMatcher uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
//往 Uri匹配器中添加指定的数据路径
    static {
        uriMatcher.addURI(UserInfoContent.AUTHORITIES,"/user",USER_INFO);
}

    public UserInfoProvider() {
    }
    //    创建一个数据库的帮助器对象的时候调用，可以在此获取具体的数据库帮助器实例
    @Override
    public boolean onCreate() {
        userDB=UserDBHelper.getInstance(getContext());
        return true;
    }

//    插入数据
    @Override
    public Uri insert(Uri uri, ContentValues values) {
       if(uriMatcher.match(uri)==USER_INFO){//匹配到了用户信息表（以上自定义的）
//           获取数据库SQLite数据库写的连接
           SQLiteDatabase db=userDB.getWritableDatabase();
           //向指定的表插入数据，返回记录的行号
           long rowId=db.insert(userDB.TABLE_NAME,null,values);
           if(rowId>0){//判断是否插入成功
               //插入成功,就利用新记录的行号生成新的地址
               Uri newUri= ContentUris.withAppendedId(UserInfoContent.CONTENT_URI,rowId);
//               通知监听器，数据改变
               getContext().getContentResolver().notifyChange(newUri,null);
           }
           db.close();//关闭SQLite数据库连接

       }
        Log.v("insert得到新的Uri：%s", String.valueOf(uri));
       return uri;
    }

//根据条件删除数据
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count=0;
        if(uriMatcher.match(uri)==USER_INFO){///匹配到了用户信息表（以上自定义的）
//            获取数据库写连接
            SQLiteDatabase db=userDB.getWritableDatabase();
            //执行数据库删除操作，并返回删除记录的数目
            count=db.delete(UserDBHelper.TABLE_NAME,selection,selectionArgs);
            db.close();
        }
        Log.v("delete删除记录的数目：%s", String.valueOf(count));
        return count;
    }
    //根据条件查询数据
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        Cursor cursor=null;
        if(uriMatcher.match(uri)==USER_INFO) {///匹配到了用户信息表（以上自定义的）
            //            获取数据库读连接
            SQLiteDatabase db=userDB.getReadableDatabase();
//           数据库查询操作
            db.query(UserDBHelper.TABLE_NAME,projection,selection,selectionArgs,null,null,null,sortOrder);
            //设置内容解析器的监听
            cursor.setNotificationUri(getContext().getContentResolver(),uri);
        }
        Log.v("query返回查询结果集的游标:%s", cursor.toString());
        //返回查询结果集的游标
        return cursor;
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        // TODO: Implement this to handle requests to update one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}